;==============================================================================
;REVISION HISTORY:
;AN000 - New for DOS Version 3.4 - J.K.
;AC000 - Changed for DOS Version 3.4 - J.K.
;ANxxx - PTR, DCRs
;==============================================================================
;AN001 - d9  Double word MOV instruction for 80386 based machine.    7/1/87 J.K.
;AN002 - d25 Change DASD ERP to that recommended by Storage Systems. 7/29/87 J.K.
;AN003; d304 Boot record structure change for OS2		     11/9/87 J.K.
;==============================================================================
	EXTRN	INIT:NEAR

	PUBLIC	START$
START$:
	JMP	INIT			;START$ PATCH BY INIT TO POINT TO
					;HDRIVE BPB
;	PUBLIC	FORMAT_PATCH
;FORMAT_PATCH:				 ;ARR 2.42
;	JMP	FMTSET			;MJB001 DISPATCH FOR CALL FROM FORMAT UTILITY


	PATHSTART 001,BIO

;	DB	20 DUP (0)		;IBM WANTS SOME ZEROED AREA (DELETED)


;HEADER  DB	 "Ver 2.45"
;--------------------------------------------------------------
;
;	COMMAND JUMP TABLES
;
;	BEWARE - THESE TABLES OVERLAP SOMEWHAT! -C.P.
;
	ODD
DSKTBL	LABEL	BYTE
	DB	24			; THIS IS THE SIZE OF THE TABLE YUK!!!!
	DW	DSK$INIT
	DW	MEDIA$CHK
	DW	GET$BPB
	DW	CMDERR			;RS
	DW	DSK$READ
	DW	BUS$EXIT
	DW	EXIT
	DW	EXIT
	DW	DSK$WRIT
	DW	DSK$WRITV
	DW	EXIT			;ARR 2.41
	DW	EXIT			;ARR 2.41
	DW	CMDERR			;RS

	PUBLIC	TABLE_PATCH
TABLE_PATCH LABEL WORD			   ;ARR 2.42
	DW	DSK$OPEN		;ARR 2.41
	DW	DSK$CLOSE		;ARR 2.41
	DW	DSK$REM 		;ARR 2.41
	DW	EXIT
	DW	EXIT
	DW	EXIT
	DW	GENERIC$IOCTL		; KGS	3.20
	DW	EXIT
	DW	EXIT
	DW	EXIT
	DW	IOCTL$GETOWN		; RS 3.20
	DW	IOCTL$SETOWN		; RE 3.20

	ODD
CONTBL	LABEL	BYTE
	DB	10
	DW	EXIT
	DW	EXIT
	DW	EXIT
	DW	CMDERR
	DW	CON$READ
	DW	CON$RDND
	DW	EXIT
	DW	CON$FLSH
	DW	CON$WRIT
	DW	CON$WRIT
	DW	EXIT			;ARR 2.41

;	DW	CMDERR			;J.K. 4/29/86 for CON$GENIOCTL support
;	DW	CMDERR			;J.K. 4/29/86
;	DW	CMDERR			;J.K. 4/29/86
;	DW	CMDERR			;J.K. 4/29/86
;	DW	CMDERR			;J.K. 4/29/86
;	DW	CMDERR			;J.K. 4/29/86
;	DW	CMDERR			;J.K. 4/29/86
;	DW	CMDERR			;J.K. 4/29/86
;	DW	CON$GENIOCTL		;J.K. 4/29/86

	ODD
AUXTBL	LABEL	BYTE
	DB	10
	DW	EXIT
	DW	EXIT
	DW	EXIT
	DW	CMDERR
	DW	AUX$READ
	DW	AUX$RDND
	DW	EXIT
	DW	AUX$FLSH
	DW	AUX$WRIT
	DW	AUX$WRIT
	DW	AUX$WRST

	ODD
TIMTBL	LABEL	BYTE
	DB	9
	DW	EXIT
	DW	EXIT
	DW	EXIT
	DW	CMDERR
	DW	TIM$READ
	DW	BUS$EXIT
	DW	EXIT
	DW	EXIT
	DW	TIM$WRIT
	DW	TIM$WRIT

	ODD
PRNTBL	LABEL	BYTE
	DB	24
	DW	EXIT			;INIT
	DW	EXIT
	DW	EXIT
	DW	CMDERR
	DW	EXIT$ZER		;INDICATE ZERO CHARS READ
	DW	BUS$EXIT
	DW	EXIT
	DW	EXIT
	DW	PRN$WRIT
	DW	PRN$WRIT
	DW	PRN$STAT
	DW	EXIT
	DW	EXIT			;ARR 2.41
	DW	EXIT			;ARR 2.41
	DW	EXIT			;ARR 2.41
	DW	EXIT			;ARR 2.41
	DW	PRN$TILBUSY
	DW	EXIT			;RS 3.20
	DW	EXIT			;RS 3.20
	DW	PRN$GENIOCTL		;RS 3.20
	DW	EXIT			;RS 3.20
	DW	EXIT			;RS 3.20
	DW	EXIT			;RS 3.20
	DW	CMDERR			;RS 3.20
	DW	CMDERR			;RS 3.20

	EVENB
	PUBLIC	OLD13			;(MOVED HERE FROM IBMBIO2)
OLD13	label	DWORD
	db	'5986'                  ;J.K. 11/7/86 Secrete Code for DOS 3.30 IBMBIO.
	  PUBLIC ORIG13
ORIG13	label	DWORD
	db	'21',0,0                ;J.K. 11/8/86 This is my employee serial # !!!

	EVENB
	PUBLIC	PTRSAV
PTRSAV	DD	0
	PUBLIC	AUXBUF
AUXBUF	DB	0,0,0,0   ;SET OF 1 BYTE BUFFERS FOR COM 1,2,3, AND 4

	EVENB
	PUBLIC PREVOPER,NUMBER_OF_SEC
PREVOPER	DW	?	; HOLDS INT 13 REQUEST (I.E. REGISTER AX).
NUMBER_OF_SEC	DB	?	; HOLDS NUMBER OF SECTORS TO READ ON AN ECC ERROR

	IF	($-CODE) GT 100H
	    %OUT VDISK BUFFER NOT CORRECTLY LOCATED
	ELSE
	    ORG 100H
	ENDIF
	PUBLIC	VDISK_AREA
VDISK_AREA DB	108 DUP(0)		;FOR USE BY VDISK

	EVENB
; WARNING!!!  THESE ARE ADDRESSED TOGETHER IN GETDX
AUXNUM	DB	0			;WHICH AUX DEVICE WAS REQUESTED
	DB	0

	EVENB
	PUBLIC	CONHEADER
CONHEADER LABEL   WORD			  ;HEADER FOR DEVICE "CON"
	DD	AUXDEV2
	DW	1000000000010011B ;CON IN AND CON OUT + SPECIAL
	DW	STRATEGY
	DW	CON$IN
	DB	'CON     '

	EVENB
	PUBLIC	AUXDEV2
AUXDEV2  LABEL	 WORD			 ;HEADER FOR DEVICE "AUX"
	DD	PRNDEV2
	DW	1000000000000000B
	DW	STRATEGY
	DW	AUX0$IN
	DB	'AUX     '

	EVENB
	PUBLIC	PRNDEV2
PRNDEV2  LABEL	 WORD			 ;HEADER FOR DEVICE "PRN"
	DD	TIMDEV
	DW	CHARDEV + OUTTILBUSY + DEV320
	DW	STRATEGY
	DW	PRN0$IN
	DB	'PRN     '

	EVENB
	PUBLIC TIMDEV
TIMDEV	LABEL	WORD
	DD	DSKDEV
	DW	1000000000001000B
	DW	STRATEGY
	DW	TIM$IN
	DB	'CLOCK$  '

	EVENB
	PUBLIC	DSKDEV
DSKDEV	LABEL	WORD
	DD	COM1DEV
	DW	0000100001000010B	;J.K.I1. 32 bit sector calculation
	DW	STRATEGY
	DW	DSK$IN
DRVMAX	DB	4
	PUBLIC DRVMAX

	PUBLIC STEP_DRV
STEP_DRV	DB     -2		; ARR 2.20 LAST DRIVE ACCESSED

	PUBLIC PHYS_DRV
PHYS_DRV	DB	0		; USED BY SETDRIVE FOR GETTING BDS FOR
					; LOGICAL DRIVE, OR PHYSICAL DRIVE.
	PUBLIC FHAVE96
FHAVE96 	DB	0		; FLAG TO INDICATE PRESENCE OF
					;   96TPI SUPPORT
	PUBLIC SINGLE
SINGLE		DB	0		; USED TO DETECT SINGLE DRIVE SYSTEMS

	PUBLIC FHAVEK09
FHAVEK09	DB	0		;INDICATES IF THIS IS A K09 OR NOT
					; USED BY CONSOLE DRIVER.
	PUBLIC NEW_ROM
NEW_ROM 	DB	0		;SET TO 1 IF WE HAVE A ROM THAT CAN
					; HANDLE STRANGE MEDIA LAYOUTS.

	PUBLIC FSETOWNER
FSETOWNER	DB	?		;=1 IF WE ARE SETTING THE OWNER OF A
					;DRIVE. (EXAMINED BY CHECKSINGLE).
	public	Secrete_Code
Secrete_Code	dw	'jk'            ;J.K. 11/7/86 Secrete code for DOS 3.30 IBMBIO.

	EVENB
	PUBLIC COM1DEV
COM1DEV LABEL	WORD
	DD	LPT1DEV
	DW	1000000000000000B
	DW	STRATEGY
	DW	AUX0$IN
	DB	'COM1    '

	EVENB
	PUBLIC LPT1DEV
LPT1DEV LABEL	WORD
	DD	LPT2DEV
	DW	CHARDEV + OUTTILBUSY + DEV320
	DW	STRATEGY
	DW	PRN1$IN
	DB	'LPT1    '

	EVENB
	PUBLIC	LPT2DEV
LPT2DEV LABEL	WORD
	DD	LPT3DEV
	DW	CHARDEV + OUTTILBUSY + DEV320
	DW	STRATEGY
	DW	PRN2$IN
	DB	'LPT2    '

	EVENB
	PUBLIC	LPT3DEV
LPT3DEV LABEL	WORD
	DD	COM2DEV
	DW	CHARDEV + OUTTILBUSY + DEV320
	DW	STRATEGY
	DW	PRN3$IN
	DB	'LPT3    '

	EVENB
	PUBLIC	COM2DEV
COM2DEV LABEL	WORD
	DD	COM3DEV
	DW	1000000000000000B
	DW	STRATEGY
	DW	AUX1$IN
	DB	'COM2    '

	EVENB
	PUBLIC	COM3DEV
COM3DEV LABEL	WORD			;EDK
	DD	COM4DEV
	DW	1000000000000000B
	DW	STRATEGY
	DW	AUX2$IN
	DB	'COM3    '

	EVENB
	PUBLIC	COM4DEV
COM4DEV LABEL	WORD			;EDK
	DW	-1,CODE
	DW	1000000000000000B
	DW	STRATEGY
	DW	AUX3$IN
	DB	'COM4    '

; HARD-WIRE THE LINK TO THE NEXT INT2F HANDLER.
		EVENB
	PUBLIC	NEXT2F_13
NEXT2F_13	LABEL	WORD
	EXTRN INT2F_DISK:FAR		;IBMBIO2
		DD	INT2F_DISK

	EVENB
	PUBLIC START_BDS
START_BDS LABEL WORD
       DD      BDS1	       ;START OF BDS LINKED LIST.
	PUBLIC ACCESSCOUNT
ACCESSCOUNT	DB	0		; NUMBER OF TIMES MEDIA CHECK CALLED
	PUBLIC TIM_DRV
TIM_DRV 	DB	-1		; TIME WHEN LAST DISK I/O PERFORMED
	PUBLIC FLAGBITS
FLAGBITS	DW	0		; BITS TO SET IN FLAG FIELD WHEN DOING
					; A SET_CHANGED_DL
	PUBLIC	MEDBYT
MEDBYT		DB	?

		EVENB
	PUBLIC WRTVERIFY
WRTVERIFY LABEL WORD
	PUBLIC RFLAG
RFLAG		DB	ROMREAD 		;2 FOR READ, 3 FOR WRITE
VERIFY		DB	0			;1 IF VERIFY AFTER WRITE
	PUBLIC SECCNT
SECCNT		DW	0
	  PUBLIC HARDNUM
HARDNUM 	DB	99			;LOGICAL DRIVE NUMBER OF FIRST HARDFILE
	PUBLIC MOTORSTARTUP,SETTLECURRENT,SETTLESLOW
MOTORSTARTUP	DB  ?			; VALUE FROM TABLE
SETTLECURRENT	DB  ?			; VALUE FROM TABLE
SETTLESLOW	DB  ?			; SLOW SETTLE VALUE

NEXTSPEED	DB  ?			; VALUE OF SPEED TO BE USED
	public	save_head_sttl
Save_head_sttl	db  ?		;used by READ_SECTOR routine

	    PUBLIC EOT
EOT		DB  9

		EVENB
	PUBLIC DPT
DPT		DD  ?

;KEEP THE NEXT TWO ITEMS CONTIGUOUS - SEE IOCTL_BLOCK FOR REASON
	PUBLIC CURSEC,CURHD,CURTRK,SPSAV
CURSEC	DB	0			;CURRENT SECTOR
CURHD	DB	0			;CURRENT HEAD
CURTRK	DW	0			;CURRENT TRACK
SPSAV	DW	0			;SAVE THE STACK POINTER

; THE FOLLOWING ARE USED FOR IOCTL FUNCTION CALLS
	PUBLIC FORMT_EOT,HDNUM,TRKNUM,GAP_PATCH
FORMT_EOT	DB	8		    ; EOT USED FOR FORMAT
HDNUM		DB	0		    ; HEAD NUMBER
TRKNUM		DW	0		    ; TRACK BEING MANIPULATED
GAP_PATCH	DB	50H		    ; FORMAT GAP PATCHED INTO DPT

;DISK ERRORS RETURNED FROM THE IBM ROM
	PUBLIC ERRIN
ERRIN	LABEL	BYTE
	db	0cch			;AN002; Write Fault error
	DB	80H			;NO RESPONSE
	DB	40H			;SEEK FAILURE
	DB	10H			;BAD CRC
	DB	8			;DMA OVERRUN
	DB	6			; MEDIA CHANGE
	DB	4			;SECTOR NOT FOUND
	DB	3			;WRITE ATTEMPT TO WRITE-PROTECT DISK
	PUBLIC LSTERR
LSTERR	DB	0			;ALL OTHER ERRORS

;RETURNED ERROR CODES CORRESPONDING TO ABOVE
	PUBLIC ERROUT
ERROUT	LABEL	BYTE
	db	10			;AN002; Write Fault error
	DB	2			;NO RESPONSE
	DB	6			;SEEK FAILURE
	DB	4			;BAD CRC
	DB	4			;DMA OVERRUN
	DB	15			; INVALID MEDIA CHANGE
	DB	8			;SECTOR NOT FOUND
	DB	0			;WRITE ATTEMPT ON WRITE-PROTECT DISK
	DB	12			;GENERAL ERROR
	PUBLIC NUMERR
NUMERR	=	ERROUT-ERRIN

;-------------------------------------------------------------

;   READ IN BOOT SECTOR HERE,  READ DONE IN READBOOT.
;   ALSO READ SECTOR FOR DMA CHECK FOR HARD DISK.

;J.K. The buffer for a disk sector is going to be at a double word boundary
;     for 80386 machine.

	IF ($-CODE) Mod 4				;AN001;
		Org ($-CODE)+4-(($-CODE) Mod 4) 	;AN001;
	ENDIF						;AN001;

       PUBLIC DISKSECTOR
DiskSector		DB	11 DUP(?) ; TAKE CARE OF 3 JUMP BYTES PLUS OEM NAME.
	PUBLIC BPB_IN_SECTOR
Bpb_In_Sector		DW	?
	PUBLIC SECPERCLUSINSECTOR
SecPerClusInSector	DB	?
			DW	?
	public NumberOfFats
NumberOfFats		DB	?
			DW	?
			DW	?
	PUBLIC MEDIABYTE
MediaByte		DB	?
			DW	?
			DW	?
			DW	?
			DW	?
			DW	?	;AN000; Extended Hidden sector (high)
			DW	?	;AN000; Extended Total sector (low)
			DW	?	;AN000; Extended Total sector (high)
			db	?	;AN003; PHYDRV in boot record.
			db	?	;AN003; CURRENT HEAD in boot record.
	public Ext_Boot_Sig
Ext_Boot_Sig		DB	?	;AN000; Extended Boot record sig. (=90h)
	public Boot_Serial_L
Boot_Serial_L		DW	?	;AN000; Boot volume serial number (Low)
	public Boot_Serial_H
Boot_Serial_H		DW	?	;AN000; Boot volume serial number (High)
	public Boot_Volume_Label
Boot_Volume_Label	DB	11 dup (' ') ;AN000; Volume label
	public Boot_System_ID
Boot_System_ID		DB	8  dup (' ') ;AN000; File system Id.
			DB	512-($-DISKSECTOR) DUP (?)

;*********************************************************************
;	"BDS" CONTAINS INFORMATION FOR EACH DRIVE IN THE SYSTEM.
;	VARIOUS VALUES ARE PATCHED WHENEVER ACTIONS ARE PERFORMED.
;	SECTORS/ALLOC. UNIT IN BPB INITIALLY SET TO -1 TO SIGNIFY THAT
;	THE BPB HAS NOT BEEN FILLED. LINK ALSO SET TO -1 TO SIGNIFY END
;	OF LIST. # OF CYLINDERS IN MAXPARMS INITIALIZED TO -1 TO INDICATE
;	THAT THE PARAMETERS HAVE NOT BEEN SET.
;
	EVENB
BDS1	LABEL	WORD
	DD	BDS2			;LINK TO NEXT STRUCTURE
	DB	0			;INT 13 DRIVE NUMBER
	DB	0			;LOGICAL DRIVE LETTER
	PUBLIC	FDRIVE1
FDRIVE1 DW	512			;PHYSICAL SECTOR SIZE IN BYTES
	DB	-1			;SECTORS/ALLOCATION UNIT
	DW	1			;RESERVED SECTORS FOR DOS
	DB	2			;NO. ALLOCATION TABLES
	DW	64			;NUMBER DIRECTORY ENTRIES
	DW	9*40			;NUMBER SECTORS (AT 512 BYTES EA.)
	DB	00000000B		;MEDIA DESCRIPTOR, INITIALLY 00H.
	DW	2			;NUMBER OF FAT SECTORS
	DW	9			;SECTOR LIMIT
	DW	1			;HEAD LIMIT
	DW	0			;HIDDEN SECTOR COUNT (low word)
	dw	0			;J.K. Hidden sector (high)
	dw	0			;J.K. Number sectors (low)
	dw	0			;J.K. Number sectors (high)
	DB	0			; TRUE => LARGE FATS
OPCNT1	DW	0			;OPEN REF. COUNT

	DB	3			;FORM FACTOR
FLAGS1	DW	0020H			;VARIOUS FLAGS
;	DB	9 DUP (0)		;RESERVED FOR FUTURE USE
	DW	40			; NUMBER OF CYLINDERS
; RECOMMENDED BPB FOR DRIVE.
RECBPB1 DW	512			;BYTES PER SECTOR
	DB	1			;SECTORS/ALLOCATION UNIT
	DW	1			;RESERVED SECTORS FOR DOS
	DB	2			;NO. ALLOCATION TABLES
	DW	0E0H			;NUMBER DIRECTORY ENTRIES
	DW	9*40			;NUMBER SECTORS (AT 512 BYTES EA.)
	DB	0F0H			;MEDIA DESCRIPTOR, INITIALLY F0H.
	DW	2			;NUMBER OF FAT SECTORS
	DW	9			;SECTOR LIMIT
	DW	2			;HEAD LIMIT
	DW	0			;HIDDEN SECTOR COUNT(low)
	dw	0			;J.K. Hidden sector count (high)
	dw	0			;J.K. Number sectors (low)
	dw	0			;J.K. Number sectors (high)
	DB	6 DUP (?)
TRACK1	DB	-1			;LAST TRACK ACCESSED ON THIS DRIVE
TIM_LO1 DW	-1			;KEEP THESE TWO CONTIGUOUS (?)
TIM_HI1 DW	-1
VOLID1	DB	"NO NAME    ",0         ;VOLUME ID FOR THIS DISK
VOLSER1 dd	0	     ;Current volume serial number from Boot record
SYSID1	db	"FAT12   ",0 ;Current file system id from Boot record

	EVENB
BDS2	LABEL	WORD
	DD	BDS3			;LINK TO NEXT STRUCTURE
	DB	0			;INT 13 DRIVE NUMBER
	DB	0			;LOGICAL DRIVE LETTER
	PUBLIC	FDRIVE2
FDRIVE2 DW	512			;PHYSICAL SECTOR SIZE IN BYTES
	DB	-1			;SECTORS/ALLOCATION UNIT
	DW	1			;RESERVED SECTORS FOR DOS
	DB	2			;NO. ALLOCATION TABLES
	DW	64			;NUMBER DIRECTORY ENTRIES
	DW	9*40			;NUMBER SECTORS (AT 512 BYTES EA.)
	DB	00000000B		;MEDIA DESCRIPTOR, INITIALLY 00H.
	DW	2			;NUMBER OF FAT SECTORS
	DW	9			;SECTOR LIMIT
	DW	1			;HEAD LIMIT
	DW	0			;HIDDEN SECTOR COUNT (low word)
	dw	0			;J.K. Hidden sector (high)
	dw	0			;J.K. Number sectors (low)
	dw	0			;J.K. Number sectors (high)
	DB	0			; TRUE => LARGE FATS
OPCNT2	DW	0			;OPEN REF. COUNT
	DB	3			;FORM FACTOR
FLAGS2	DW	0020H			;VARIOUS FLAGS
;	DB	9 DUP (0)		;RESERVED FOR FUTURE USE
	DW	40			; NUMBER OF CYLINDERS
; RECOMMENDED BPB FOR DRIVE.
RECBPB2 DW	512			;BYTES PER SECTOR
	DB	1			;SECTORS/ALLOCATION UNIT
	DW	1			;RESERVED SECTORS FOR DOS
	DB	2			;NO. ALLOCATION TABLES
	DW	0E0H			;NUMBER DIRECTORY ENTRIES
	DW	9*40			;NUMBER SECTORS (AT 512 BYTES EA.)
	DB	0F0H			;MEDIA DESCRIPTOR, INITIALLY F0H.
	DW	2			;NUMBER OF FAT SECTORS
	DW	9			;SECTOR LIMIT
	DW	2			;HEAD LIMIT
	DW	0			;HIDDEN SECTOR COUNT(low)
	dw	0			;J.K. Hidden sector count (high)
	dw	0			;J.K. Number sectors (low)
	dw	0			;J.K. Number sectors (high)
	DB	6 DUP (?)
TRACK2	DB	-1			;LAST TRACK ACCESSED ON THIS DRIVE
TIM_LO2 DW	-1			;KEEP THESE TWO CONTIGUOUS (?)
TIM_HI2 DW	-1
VOLID2	DB	"NO NAME    ",0         ;VOLUME ID FOR THIS DISK
VOLSER2 dd	0	     ;Current volume serial number from Boot record
SYSID2	db	"FAT12   ",0 ;Current file system id from Boot record

	EVENB
BDS3	LABEL	WORD
	DD	BDS4			;LINK TO NEXT STRUCTURE
	DB	0			;INT 13 DRIVE NUMBER
	DB	0			;LOGICAL DRIVE LETTER
	PUBLIC	FDRIVE3
FDRIVE3 DW	512			;PHYSICAL SECTOR SIZE IN BYTES
	DB	-1			;SECTORS/ALLOCATION UNIT
	DW	1			;RESERVED SECTORS FOR DOS
	DB	2			;NO. ALLOCATION TABLES
	DW	64			;NUMBER DIRECTORY ENTRIES
	DW	9*40			;NUMBER SECTORS (AT 512 BYTES EA.)
	DB	00000000B		;MEDIA DESCRIPTOR, INITIALLY 00H.
	DW	2			;NUMBER OF FAT SECTORS
	DW	9			;SECTOR LIMIT
	DW	1			;HEAD LIMIT
	DW	0			;HIDDEN SECTOR COUNT (low word)
	dw	0			;J.K. Hidden sector (high)
	dw	0			;J.K. Number sectors (low)
	dw	0			;J.K. Number sectors (high)
	DB	0			; TRUE => LARGE FATS
OPCNT3	DW	0			;OPEN REF. COUNT
	DB	3			;FORM FACTOR
FLAGS3	DW	0020H			;VARIOUS FLAGS
;	DB	9 DUP (0)		;RESERVED FOR FUTURE USE
	DW	40			; NUMBER OF CYLINDERS
; RECOMMENDED BPB FOR DRIVE.
RECBPB3 DW	512			;BYTES PER SECTOR
	DB	1			;SECTORS/ALLOCATION UNIT
	DW	1			;RESERVED SECTORS FOR DOS
	DB	2			;NO. ALLOCATION TABLES
	DW	0E0H			;NUMBER DIRECTORY ENTRIES
	DW	9*40			;NUMBER SECTORS (AT 512 BYTES EA.)
	DB	0F0H			;MEDIA DESCRIPTOR, INITIALLY F0H.
	DW	2			;NUMBER OF FAT SECTORS
	DW	9			;SECTOR LIMIT
	DW	2			;HEAD LIMIT
	DW	0			;HIDDEN SECTOR COUNT(low)
	dw	0			;J.K. Hidden sector count (high)
	dw	0			;J.K. Number sectors (low)
	dw	0			;J.K. Number sectors (high)
	DB	6 DUP (?)
TRACK3	DB	-1			;LAST TRACK ACCESSED ON THIS DRIVE
TIM_LO3 DW	-1			;KEEP THESE TWO CONTIGUOUS (?)
TIM_HI3 DW	-1
VOLID3	DB	"NO NAME    ",0         ;VOLUME ID FOR THIS DISK
VOLSER3 dd	0	     ;Current volume serial number from Boot record
SYSID3	db	"FAT12   ",0 ;Current file system id from Boot record

	EVENB
BDS4	LABEL	WORD
	DW	-1			;LINK TO NEXT STRUCTURE
	DW	CODE
	DB	0			;INT 13 DRIVE NUMBER
	DB	0			;LOGICAL DRIVE LETTER
	PUBLIC	FDRIVE4
FDRIVE4 DW	512			;PHYSICAL SECTOR SIZE IN BYTES
	DB	-1			;SECTORS/ALLOCATION UNIT
	DW	1			;RESERVED SECTORS FOR DOS
	DB	2			;NO. ALLOCATION TABLES
	DW	64			;NUMBER DIRECTORY ENTRIES
	DW	9*40			;NUMBER SECTORS (AT 512 BYTES EA.)
	DB	00000000B		;MEDIA DESCRIPTOR, INITIALLY 00H.
	DW	2			;NUMBER OF FAT SECTORS
	DW	9			;SECTOR LIMIT
	DW	1			;HEAD LIMIT
	DW	0			;HIDDEN SECTOR COUNT (low word)
	dw	0			;J.K. Hidden sector (high)
	dw	0			;J.K. Number sectors (low)
	dw	0			;J.K. Number sectors (high)
	DB	0			; TRUE => LARGE FATS
OPCNT4	DW	0			;OPEN REF. COUNT
	DB	3			;FORM FACTOR
FLAGS4	DW	0020H			;VARIOUS FLAGS
;	DB	9 DUP (0)		;RESERVED FOR FUTURE USE
	DW	40			; NUMBER OF CYLINDERS
; RECOMMENDED BPB FOR DRIVE.
RECBPB4 DW	512			;BYTES PER SECTOR
	DB	1			;SECTORS/ALLOCATION UNIT
	DW	1			;RESERVED SECTORS FOR DOS
	DB	2			;NO. ALLOCATION TABLES
	DW	0E0H			;NUMBER DIRECTORY ENTRIES
	DW	9*40			;NUMBER SECTORS (AT 512 BYTES EA.)
	DB	0F0H			;MEDIA DESCRIPTOR, INITIALLY F0H.
	DW	2			;NUMBER OF FAT SECTORS
	DW	9			;SECTOR LIMIT
	DW	2			;HEAD LIMIT
	DW	0			;HIDDEN SECTOR COUNT(low)
	dw	0			;J.K. Hidden sector count (high)
	dw	0			;J.K. Number sectors (low)
	dw	0			;J.K. Number sectors (high)
	DB	6 DUP (?)
TRACK4	DB	-1			;LAST TRACK ACCESSED ON THIS DRIVE
TIM_LO4 DW	-1			;KEEP THESE TWO CONTIGUOUS (?)
TIM_HI4 DW	-1
VOLID4	DB	"NO NAME    ",0         ;VOLUME ID FOR THIS DISK
VOLSER4 dd	0	     ;Current volume serial number from Boot record
SYSID4	db	"FAT12   ",0 ;Current file system id from Boot record

BPBTYPE STRUC
SPF	DB	?
SPT	DB	?
CDIRE	DB	?
CSEC	DW	?
SPA	DB	?
CHEAD	DB	?
BPBTYPE ENDS
	PUBLIC SM92
SM92	BPBTYPE <3,9,70H,2*9*80,2,2>

;-----------------------------------------------
;
;	C O N - CONSOLE DEVICE DRIVER
;
	PUBLIC	ALTAH
ALTAH	DB	0			;SPECIAL KEY HANDLING
	public	KEYRD_Func
KEYRD_Func DB	0			;AN000; Default is conventional keyboard read
	public	KEYSTS_Func
KEYSTS_Func DB	1			;AN000; Defualt if conventional keyboard status check.

;	 PUBLIC  SAV_SC_INFO		 ;J.K. 4/29/86 FOR CON$GENIOCTL
;	 PUBLIC  SAV_SC_MODE
;	 PUBLIC  SAV_SC_COLORS
;	 PUBLIC  SAV_SC_WIDTH
;	 PUBLIC  SAV_SC_LENGTH
;SAV_SC_INFO	 LABEL	 BYTE
;SAV_SC_MODE	 DB	 0
;SAV_SC_COLORS	 DW	 0
;SAV_SC_WIDTH	 DW	 0
;SAV_SC_LENGTH	 DW	 0		 ;J.K. 4/29/86 FOR CON$GENIOCTL

;-------------------------------------------------------------
;
;	P R N - PRINTER DEVICE
;
	PUBLIC PRINTDEV
PRINTDEV	DB	0		; INDEX INTO ABOVE ARRAY

; THE FOLLOWING VARIABLE CAN BE MODIFIED VIA IOCTL SUB-FUNCTION 16. IN THIS
; WAY, THE WAIT CAN BE SET TO SUIT THE SPEED OF THE PARTICULAR PRINTER BEING
; USED. ONE FOR EACH PRINTER DEVICE.

		EVENB
	PUBLIC WAIT_COUNT
WAIT_COUNT	DW	4 DUP (50H)	; ARRAY OF RETRY COUNTS FOR PRINTER

		EVENB
	PUBLIC DAYCNT
DAYCNT	DW	0


	IF	iTEST		 ;Testing Mode for IBMBIO.
	    PUBLIC  NUMBUF
NUMBUF	    DB	    5 DUP (?)
	    PUBLIC  DIGITS
DIGITS	    DB	    "0123456789ABCDEF"
	    PUBLIC  FTESTBITS
;FTESTBITS   DW      FTESTDISK+FTESTINIT
FTESTBITS   DW	    fTestDISK
;ftestbits dw ftestclock
	ENDIF

	PATHEND 001,BIO
